package Network;
import java.rmi.*;

/**
 * Интерфейс с набором методов для организации взаимодействия сервер->арбитр
 * @author TrueWar ID = 2009
 */
public interface IArbitrationController extends INetworkRetryInterface,
    IArbitrationTaskManager{

  /**
   * Проверяет запрос об сетевой активности сервера
   * @throws java.rmi.RemoteException - сервер не доступен
  */
	public void ping() throws RemoteException;

   /**
    * Удалить сервер из сети
    * @param  address адрес удаляемого сервера
    * @return true сервер успешно удалён, false сервер с таким адресом не зарегистрирован в системе
    * @throws java.rmi.RemoteException разрыв соединения
    */
  public boolean remove(NetworkAddress address) throws RemoteException;

  /**
   * запросить уникальный идентификатор сервера у арбитра
   * @return уникальный идентификатор сервера
   */
  public long generateServerID() throws RemoteException;

    /**
     * Запросить заглушку ведомого сервера по адресу
     * @param address адрес сервера
     * @return заглушка ведомого
     * @author Aleksey ID=2001
     */
    public ISlaveServer getSlaveStub(NetworkAddress address) throws RemoteException;

    /**
     * Обновить параметры сервера
     * @param oldAddress старые параметры сервера
     * @param newAddress новые параметры сервера
     * @return true - обновление завершилось успешно
     * @throws java.rmi.RemoteException false - обновление завершилось провалом
     */
    public boolean slaveUpdateConfig(NetworkAddress oldAddress, NetworkAddress newAddress) throws RemoteException;

}
